{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "770a2f8b",
   "metadata": {},
   "source": [
    "### 2.3.3 线性模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "76579b84",
   "metadata": {},
   "source": [
    "线性模型利用输入特征的**线性函数**进行预测"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "591403dd",
   "metadata": {},
   "source": [
    "##### 1. 用于回归的线性模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "05ff21a0",
   "metadata": {},
   "source": [
    "$ \\hat{y} = w[0] * x[0] + w[1] * x[1]\\quad+ ... +\\quad w[p] * x[p] + b $"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc69733e",
   "metadata": {},
   "source": [
    "这里$w[i]$ 和 $b$ 是学习模型的参数， $x[0]...x[p]$是单个数据点的特征， $\\hat{y}$是模型的预测结果。对于单一特征的数据集，公式如下"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d848cdc",
   "metadata": {},
   "source": [
    "$\\hat{y} = w * x + b$"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c0f5ac8f",
   "metadata": {},
   "source": [
    "这其实类似高中数学的直线方程，其中$w$就是斜率，$b$是直线在y轴的偏移量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "78a0e2ec",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "w[0]: 0.393906  b: -0.031804\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAdMAAAGuCAYAAADLQuyyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xl8VPW9//H3ZAEcCEuDLJINFQMkYFgS6BUhKKAF7C32VqJp3fBibbW2VVotVxF/Rr3W/nr19t4Hl/ZntTVtAJcqYF1Qwi2IJiCLiESxZgNkXwIhIcv5/ZEmEDKTzMyZmXPOzOv5ePRRMjkz880343nne873+/m6DMMQAAAIXIzVDQAAwOkIUwAATCJMAQAwiTAFAMAkwhQAAJMIUwAATCJMgTBzuVw9XC5Xicvl2uZyuT5xuVyLrW4TAHNcrDMFwsvlcrkk9TQM46TL5YqXtF7SvYZhfGBx0wAEKM7qBgDRxmj5C/bkP76M/8f/+KsWcDAu8wIWcLlcsS6Xa6ukA5LeMQzjQ6vbBCBwfl3m3bhxo1FfXx+0Nz916pR69uwZtNdzOvrjrGjpi5MnT+qhhx7Sj370Iw0dOrTd91auXKlVq1ZJkurq6vTCCy9Y0URbipbPhy/oi/aC3R+5ubkuX47z955pUC9FFRcXKzc3N5gv6Wj0x1nR1BeLFy9Wz549df/993s9Jj09XWVlZWFslb1F0+ejK/RFeyHoD5/ClMu8QJgdPHhQx44dkySdPn1aa9as0fDhwy1uFQAzmIAEhNm+fft0yy23qKmpSc3Nzbrhhhs0e/Zsq5sFwATCFAiz0aNHa8uWLVY3A0AQEaYAYIGGhgZVV1errq7O1Ov06dNHn376aZBa5XyB9kePHj2UlJSk+Pj4gN6XMAUAC1RXVyshIUFpaWlqqeMRmJqaGiUkJASxZc4WSH8YhqHDhw+rurq6w6x6XzEBCQAsUFdXp8TERFNBiuBwuVxKTEw0dZWAMAUAixCk9mH2d0GYAgBMS0tL06FDh0wf41SEKQAAJhGmABClysvLNXz4cN1xxx3KzMxUfn6+1qxZoyuuuELDhg1TSUmJjhw5om9961saPXq0Jk6cqO3bt0uSDh8+rBkzZmjMmDG68847dW41vRdffFE5OTnKysrSnXfeqaamJqt+xLBhNi8AWGzxyk+0c++JgJ7b1NSk2NjYDo+PvKi3Fl2X0eXzd+/erRUrVmjp0qXKzs7Wn/70J61fv16vv/66Hn/8cSUnJ2vMmDH6y1/+ovfee08333yztm7dqsWLF2vSpEl6+OGHtXr1ai1dulSS9Omnn2rZsmXasGGD4uPj9YMf/ECFhYW6+eabA/r5nIIwBYAoNnToUI0aNUqSlJGRoauvvloul0ujRo1SeXm5Kioq9PLLL0uSrrrqKh0+fFjHjx/X//7v/+qVV16RJM2aNUv9+vWTJL377rvavHmzsrOzJbWUzBwwYIAFP1l4EaYAYDFfRpDemF1n2r1797Z/x8TEtH0dExOjxsZGxcV1jInWma+eZsAahqFbbrlFTzzxRMBtciLumQIAvJo8ebIKCwsltezI0r9/f/Xu3bvd43/961919OhRSdLVV1+tl156SQcOHJAkHTlyRBUVFdY0PowYmQIAvHrkkUd02223afTo0XK73W376i5atEg33nijxo4dqylTpiglJUWSNHLkSD322GOaMWOGmpubFR8fr//6r/9SamqqlT9GyBGmABCl0tLStGPHjravn3/+eY/fe+211zo8NzExUW+//Xbb17/+9a/b/j137lzNnTu3w3PKy8uD0Gp74jIvAAAmEaYAAJhEmAIAYBJhCgCASYQpAAAmEaYAAJhEmAJAFDp27Jj++7//O6Dnzpw5U8eOHev0mIcfflhr1qwJ6PU78/zzz+vuu+/u9Jji4mK9//77QX/vzhCmAOAAhYUVSktbrZiYFUpLW63CQnNVhToL0652eXnjjTfUt2/fTo959NFHNW3atIDbZwZhCgDooLCwQvPnb1ZFRa0MQ6qoqNX8+ZtNBeoDDzygL774QllZWVqwYIGKi4s1depU3XTTTW2F77/1rW9p3LhxysjIaNsVRjq7yXd5eblGjBihf/3Xf1VGRoZmzJih06dPS5JuvfVWvfTSS23HL1q0SGPHjtWoUaO0a9cuSdLBgwc1ffp0jR07VnfeeadSU1M9bh7++9//XpdddpmmTJmiDRs2tD2+cuVKTZgwQWPGjNG0adO0f/9+VVRUaMmSJfr1r3+trKws/e1vf/N4XLARpgBgcwsX7lBtbfvRYm1tkxYu3OHlGV178skndckll2jr1q365S9/KUkqKSlRQUGBdu7cKUl67rnntHnzZm3atEnPPvusDh8+3OF1Pv/8c/3whz/UJ598or59+7btMHO+/v3766OPPtJdd92lp59+WpK0ePFiXXXVVfroo480Z84cVVZWdnjevn37tGjRIm3YsEHvvPNOW9skadKkSfrggw+0ZcsW5eXl6amnnlJqaqq+//3v6yc/+Ym2bt2qK6+80uNxwUY5QQCwucrKWr8eD1ROTo6GDh3a9vWzzz6rV199VZJUVVWlzz//XImJie2eM3ToUGVlZUmSxo0b57Vk4PXXX992TOvWbevXr297/WuvvbZtG7dzffjhh8rNzdWFF14oqaVU4WeffSZJqq6u1ty5c7Vv3z6dOXOmXdvP5etxZjAyBQCbS0lx+/V4oHr27Nn27+LiYq1Zs0YbN27Utm3bNGbMGNXV1XV4zrlbuMXGxqqxsdHja7ced+4xhmH41C5PW71J0j333KO7775bH3/8sf7nf/7HY/v8Oc4MwhQAbK6gIFNud2y7x9zuWBUUZAb8mgkJCaqpqfH6/ePHj6tfv35yu93atWuXPvjgg4Dfy5tJkyZp+fLlkqS33367bRu3c02YMEHFxcU6fPiwGhoatGLFinZtHDJkiCS17WYjdfzZvB0XTIQpANhcfn6qli4dp9RUt1wuKTXVraVLxyk/P/BtzRITE3XFFVcoMzNTCxYs6PD9a6+9Vo2NjRo9erQeeughTZw40cyP4NGiRYv09ttva+zYsfrrX/+qwYMHd9jofPDgwXrkkUf09a9/XdOmTdPYsWPbvvfII4/oO9/5jq688kr179+/7fHrrrtOr776atsEJG/HBZPL12H2P/h1cFeKi4uVm5sbzJd0NPrjLPqivfT0dJWVlVndDNuIhM/Hp59+qhEjRph+nZqamg4B5BT19fWKjY1VXFycNm7cqLvuuktbt2419Zpm+sPL78TzNebzMAEJAGCJyspK3XDDDWpubla3bt3029/+1uomBYwwBQBYYtiwYdqyZYvVzQgK7pkCAGASYQoAFvFzzgpCyOzvgjAFAAv06NFDhw8fJlBtwDAMHT58WD169Aj4NbhnCgAWSEpKUnV1tQ4ePGjqderq6kyFQKQJtD969OihpKSkgN+XMAUAC8THxwelrF1xcbHGjBkThBZFBqv6g8u8AACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmQJhVVVVp6tSpGjFihDIyMvTMM89Y3SQAJsVZ3QAg2sTFxelXv/qVxo4dq5qaGo0bN07Tp0/XyJEjrW4agAAxMgXCbPDgwRo7dqwkKSEhQSNGjNCePXssbhUAMwhTwELl5eXasmWLJkyYYHVTAJjgMgzD54M3btxo1NfXB+3NT548qV69egXt9ZyO/jgrGvri9OnTuvfee/Xd735XkydP7vD9lStXatWqVZKko0ePavny5eFuom1Fw+fDV/RFe8Huj9zcXJcvx/kVppL8OrgrxcXFys3NDeZLOhr9cVak90VDQ4Nmz56ta665Rj/96U+7PD49PV1lZWVhaJkzRPrnwx/0RXsh6A+fwpTLvECYGYahefPmacSIET4FKQD7I0yBMNuwYYP++Mc/6r333lNWVpaysrL0xhtvWN0sACawNAYIs0mTJsnP2ysAbI6RKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAADbKSysUFraasXErFBa2moVFlZY3aROxVndAAAAzlVYWKH58zertrZJklRRUav58zdLkvLzU61smleMTAEAtrJw4Y62IG1VW9ukhQt3WNSirhGmAABbqays9etxOyBMAQC2kpLi9utxOyBMAQC2UlCQKbc7tt1jbnesCgoyLWpR1whTAICt5OenaunScUpNdcvlklJT3Vq6dJxtJx9JzOYFAHhRWFihhQt3qLKyVikpbhUUZIYt0PLzU20dnucjTAEAHThxeYqVuMwLAOjAictTrESYAgA6cOLyFCsRpgCADpy4PMVKhCkAoAMnLk+xEmEKAFHE1wLynS1PcVoR+nBgNi+AgFm5dAL+83eGrqflKczy9YyRKYCAtJ5UKypqZRhnT6qMUuwrGDN0meXrGWEKICCcVJ0nGDN0meXrGWEKICCcVJ0nGDN0meXrGWEKICCcVJ0nGDN07TrLd+feE1r02g6V7Gu05P0JUwABsetJFd4Fo4C8nYrQn6xv1J9LKvXPv1mvmc/+TX8uqdJXtc1hb4fEbF4AAWo9eTKb11mCUUDeyiL0hmFoW/VxFZVUauW2vTp1pkmXDeylh2eP1JwxQ7St9H1L2kWYAgiY03b2iCTtlyWtjvg/ZI6fbtBftuzRn0sqteurGl0QH6vZowcrLydFY1P6yuVyWdo+whQAHCZa1noahqHS8qMqKqnU6o/3qb6xWZlDeuuxb2Xqn7MuUkKPeKub2IYwBQCH6WxZUiSE6eGT9Xr5o2oVlVbp7wdPKaF7nL4zPkl52SnKHNLH6uZ5RJgCgMNE4rKk5mZD63cf0rLSKr298ys1NBkal9pPv/yXSzRr9GC5u9k7ruzdOiBC3X777Vq1apUGDBigHTsocgD/pKS4VVHRMTjtuiyps7KTXx2v04pNVVq2qUrVR0+rrzte35uYprycZF02MMHilvuOMAUscOutt+ruu+/WzTffbHVT4EAFBZnt7plK9l2W5O3+7o49x3VwYL3e23VAzYb0T5ckasE16bomY5B6xMd28ar2Q5gCFpg8ebLKy8utbgYcyknLkrzd3/1lwWfKWtBXd065RHPHJyutf0+LWhgcFG0AHIgtsJCfn6ry8ll6770LVV4+y5ZBKnm/j9tcY2jjg1fp59cOd3yQSpLLMAyfD964caNRX18ftDc/efKkevXqFbTXczr646xo6IuvvvpKDz74oH7/+997/P7KlSu1atUqSdLRo0e1fPlySdKaNXV6+ukanfufYvfu0v33J2jatB4hb3dX1qyp0+9+d0oHDjRrwIAY3XFHz6C3Kxo+H76ya1/sO9msddUNeu6BGjUc75gzAwfGqKgoMejvG+z+yM3N9WkBq19hKsmvg7tSXFys3NzcYL6ko9EfZ0VDX5SXl2v27Nk+TUBKT09XWVmZJCktbbXHySepqW6Vl88Kejv9cf79ManlXl6wy81Fw+fDV3bqi7qGJr3x8T4VlVSppPyI4mJcSjl6gd5//ojq686W+evsM2F2j9wQ9IdPYco9U8Bh7LwsItLXP8KzT/edUFFJpV7dskcn6hqVlujWz68drm+PG6IBCT1UOMm3gHRyMQrCFLDAjTfeqOLiYh06dEhJSUlavHix5s2b59Nz7bwsws5Bj+A6Wd+oldv2qqi0StuqjqlbbIyuzRykvJxkTRyaqJiYswM6X8tOOvmPMcIUsMCf//zngJ9r52URdg56mHdukfnXt+1V7XlF5vv17Gbq9Z38xxhhCjiMnZdF2DnoEbjjtQ16dUtLeb9QFpl38h9jhCngQHbdrcXOQQ//GIahki+PqKi0Sm+Eqci8k/8YI0wBBJVdgx6+sbLIvJP/GCNMASDKtRaZLyqt1Ds791taZN6pf4wRpgAQpc4vMt/PHa+bv56mvOxkDfOzyLzZ9aFOR5gCiAjRfjL3VWNTs9aWHVRRSaXWlp0tMv+za4frmoyB6h7nf5F5J68PDRbCFIDjOeVkbmXgVx2p1bLSKq3YXKX9J+rVv1d33TnlEuVlJys10VxtXCevDw0WwhRwMEZjLZxwMrci8M80NuudnftVVFqp9bsPySVpymUX6tF/TtFVwwcoPjY4e504eX1osBCmgEM5ZTQWDk44mYcz8L84eFJFJZV6+aM9OnLqjIb0vUD3Xj1MN4xP1kV9Lwjqe0nOXh8aLIQp4FBOGI2FixNO5qEOfE9F5qeNGKi8nGRdOexCxcYEp7CCJ05eHxos7GcKOJQTRmPhUlCQKbe7/cQZu53MvQW72cCvqmnWotd2KKdgjX66fJsO1NTp59cO1/sPXqUl3xun3PQBIQ1SqeVKyNKl45Sa6pbL1bKDkZmdgpy4Xy8jU8ChnDAaCxcnLPYP5uitfZH50+oWV6VrM1qKzH/94sSglffzR7DWhzr19gVhCjgUl9bas/tif7OB763I/E3Du2nBd6aYLjIfTp1NnHPq7QvCFHAoJ4zG0F4ggd9Vkfl169Y5Lkg7G3k69fYFYQo4mN1HYwiMFUXmw6WrkadTb18QpgD8wtrW0LGyyHy4dDXydOrtC8IUgM88XaL73vdK9N3vlig1lWANhKci8+NT++kuC4rMh0NXI0+n3r6IrN8SgJDydInOMFr+3ymzLu0imEXmncSXkacTb18QpgB81tUkECfMurRSKIrMO41TR55dIUwB+MzbJbpz2X3WpRXOLzJ/YULwisw7kRNHnl0hTAH4zNMluvPZfdZluJxpbNbbO7/SstIq/e3zQ4pxhabIPOyBMAXgs3Mv0VVU1MrlOnvPVHLGrMtQ233gpJaVti8y/+NpoSsyD3sgTAH45dxLdCyTaXH6TEuR+WWl4S8yD3sgTAEELBLvfflj594TKiqt1Ktb9qimrlFpiW498I3h+vbYJF2Y0N3q5iGMCFMA8ENbkfmSSm2rPq5ucTG6NmOQbsxJ0cSLv2ZJkXlYjzAFgC54KzL/8OyRmjNmiKNq4yI0CFMA8MJTkfnrLh+sudktReYZhQYu0u63E6YAcA5PReZHDemjgjmZ+ublzi4ybxdO3bO0M4QpAEg6dLJer5xXZP6G8cnKy0lWxkWRUWTeLpy6Z2lnCFMAUeP8S4uPPZaplBx31BSZtwun7lnaGT4pAKKCp0uLt9xeon7XxCs52x0VRebtwql7lnaGMAUQFX7xi487XFpsbpBiNsfog1evjooi83bh1D1LO0NxSAARrepIrZ5+q0yVlac9fv/QV/UEaZjl56dq6dJxSk11y+WSUlPdWrp0nGPvl0qMTAE4wPn3Or/73Vjl5no/3lOR+Z6JsTp1uGOBfidfWnSySKuexcgUgK213uusqKiVYbTc63z66RoVFlZ0OHb3gZMqWL1TE594V3f/aYv+fvCUfjLtMq3/+VX6n2fGye1uPwK146XFwsIKpaWtVkzMCqWlrfb4c8J+GJkCsDVPyyjq69W2jKK1yHxRaaVKy496LTLvhE2pI3H9ZbQgTAHYWmfLKB5+bYdfRebtfmkxEtdfRgvCFICteVtGEZPgUlFplb6ROUh52ZFRZD4S119GC+6ZArC1goJM9big/akqJl667d40lfziaj2TN0ZfvyTR8UEqeZ8MxSQp+yNMAdjS8doGPb/hS/3xYIV6Xh2ruD4uySUNGtJDDyzopd8+Ol593ZG1W0tBQaYjJkmhIy7zAjAlmLt/GIahD788oqKSSr2x4yudaWzW6KQ+evbfxuq6ywe3FZkvLi4O4k9gH06YJAXPCFMAAQvW7NNDJ+v18uZqLSut0t8PtRSZnxulRebtPkkKnhGmQASwam9IM7NPm5sNrd99qEOR+R9MvVSzRg3WBd2oSgTnIEwBh7NybWIgs0/3HT+tFZtaRqF7jp1WP3d8xBaZj7QNsOEdYQo4nK+jw1Cc2H3d/aOxqVnv7TqgZaVVWlt2QM2GdMWliXrgG8M1I2NgRNbGpQBDdCFMAYfzZXQYqhN7V7t/VB6u1bJNlVqxqVoHauo1IKG77sq9RHPHpyglMbKXe1CAIboQpoDD+TI6DNWJ3dPs08X/Z6T6jIrXd3/3odbvbikyn5s+QHnZybpq+ADFxUbHijwKMEQXwhRwOF/2hgzlib119unuAye1rLRSz3y0W0c+OaMhfS/QT6Zdpu+MT9JFfS8w/T5OE4kbYMM7whRwOF/WJobqxO6pyPz0kQOVl5OiSZf2bysyH40icQNseEeYAhGgq7WJwT6x79x7QkWllW1F5of279llkfloQwGG6EKYAlEgGCf2k/WNWrltr4pKKrWt+ri6xcVoZuYg5eWkaMJQ5xeZDwUKMEQPwhQRgfV8XQvkxG4YhrZWHVNRSZVWbt+r2jNNSh+YoEXXjdScMUMirjZuKz5P8BdhCsdjPV/wHas9o1e37NGy0irt+qpGF8TH6rrLBysvJ0VjkvtG9CiUzxMCQZjC8VjPFxzeisw/PmdUuyLzkY7PEwJBmMLxWM9nDkXm2+PzhEAQpnA81vP5jyLz3vF5QiAIUzge6/l856nI/C1fT1NeTrIuHRBZReYDxecJgSBM4Xis5+ucpyLzky7tH9FF5s3g84RAEKaICKzn6yiai8ybxecJ/iJMAQu8+eabuvfee9XU1KQ77rhDDzzwQFBet76xSe/s3K+ikqqoLjIPhBthCoRZU1OTfvjDH+qdd95RUlKSsrOz9c1vflMjR44M+DVbi8y//NEeHTlFkXkg3AhTIMxKSkp06aWX6uKLL5Yk5eXl6bXXXvM7TCkyD9gHYYqwoURbiz179ig5Obnt66SkJH344Yc+P/+TvcdVVFKlv2w9W2T+wW8M17fHJal/L4rMA1ZwGYbh88ETJ040jh49GrQ3b2hoUHx8dFRV8UUk98eJE4b272/SuR83l0saODBWvXt3HEFFcl/U1NTo1KlTGjRokCTpxIkTqqur04ABA9odd/z4cR07dkyS1NjYpAHJQ1VzxtCZZsklyR3vUkI3l3pE4WTcSP58+Iu+aC/Y/fHZZ5+9ZRjGtV0d51eYSvLr4K6kp6errKwsmC/paJHcH2lpqz0uhE9Ndau8fFaHxyO5LzZu3KhHHnlEb731liTpiSeekCQ9+OCD7Y4zDENbqo5pWUmV/uPu6zX41meUPjBBeTnJEV1k3heR/PnwF33RXgj6w6f7JY6/zMulQ2egRNtZ2dnZ+vzzz/Xll19qyJAhKioq0p/+9Ke2759fZN7dLVY6U6tXf/BPyorwIvOAUzk6TNndwTko0XZWXFycfvOb3+iaa65RU1OTbr/9do0cOVIf/P2w1yLzFz51RGNS+lnddABeWBqms2fPNvX8SNvdwWx/2Jm/JdoiuS8kaebMmZo5c2ZbkfmrfrVOXx46pYQeccrLTtbc7PZF5vv27Wtha+0n0j8f/qAv2rOqPywN0+uuu87U8yPt0qHZ/rAzf0u0RXJfeCoyn53WT3dPvVQzvRSZ79Mn+nZv6Uwkfz78RV+0Z1V/OPoyL5cOnSXaS7RRZB6IXJbXFnvooYc0evRoZWVlacaMGdq7d6/Pzy0oyJTb3f6veCfv7rBkyRINHz5co0eP1pw5c9qWRUSrFStWKCMjQzExMdq0aZPVzQlIY1Oz3v7kK93+fKmuePI9/d93PtPQ/j31m5vG6INfXK1/mz2y0yB98803lZ6eri+//FJPPvlkGFtuP7fffrsGDBigzExn/vcdbFVVVZo6dapuueUWZWRk6JlnnrG6SZapq6tTTk6OLr/8ct16661atGhR+BthGIY//wuqtWvXGsePH2/7+plnnjHuvPNOv17jxRfLjdTUVYbLtdxITV1lvPhiebCbGTZPPfWU0dDQYBiGYfzsZz8zfvazn1ncIuusXbvW2Llzp7Fr1y5jypQpRmlpqdVN8kvFoVPGU29+amQ/9o6R+vNVRvZj7xhPvfmpUXHolM+v0djYaFx88cXGF198YQwbNswYPXq08cknn4Sw1fa2bt06Y/PmzUZGRoaxdu1aq5tjub179xqbN2821q5da5w4ccIYNmxY1H4+mpubjZqaGsMwDOOdd94xcnJyjI0bNwbr5X3KR8sv8/bu3bvt36dOnfJ72n8kXTrMzs5WXFzLr2TixIl66aWXLG6R/4K5VGnEiBFBbl1o1Tc26e1P9quotFIbdh82XWT+3LKDLpcr4LKDkWLy5MkqLy+3uhm2MXjwYA0ePFjFxcVKSEjQiBEjtGfPnqj8fLhcLvXq1UuS1NjYqIaGhrAvIbM8TCVp4cKF+sMf/qA+ffpo7dq1VjfHFp577jnNnTvX6mb4xdtSpQ0bDumNN76K2LXAuw+cVFFJpV7ZEtwi82bLDiJ6lJeXa8uWLZowYYLVTbFMU1OTxo0bp7KyMv3oRz8Ke1+EJUynTZumr776qsPjeXl5ys3NVUFBgQoKCvTEE0/oN7/5jRYvXhyOZlnCW18UFBS0zdgsKChQXFyc8vPzw908U7wtVVqy5O9tZQTPXwvc1WfDrsJRZN7wUJ2Mgg043+nTp/Xtb39b//Ef/9HuSl+0iY2N1datW7Vq1Sr96le/0o4dO8J6fz0sYbpmzRqPjxcXF7f7+qabbtKsWbMiOky99YXU0h8vvPCCVq1apXfffddxJ05vS5LOz4Rz1wL7+tmwi3AWmU9KSlJVVVXb19XV1brooouC+h5wtoaGBj388MPKz8/X9ddfb3VzbKFXr17Kzc3Vm2++GXlh2pnPP/9cw4YNkyS9/vrrGj58uMUtsk5JSYmef/55rVu3Tm6385b3eFuq5ImT1gLX1DVo5baWUej26uPqFhfsNjcyAAASZElEQVSjmZmDlJeToglDvxayP3rOLTtoGEaHsoOIboZhaN68eUpNTdVPf/pTq5tjqYMHDyo+Pl59+/ZVfX291qxZo5///OdhbYOlhe6Li4v1n//5nyorK1NMTIxSU1O1ZMkSDRkyJJhv4xhDhgxRTEyMEhMTJbVMQlqyZInFrfLd+fdMpZadYTx9xLwVuG9VXFyso0eP6p577tHBgwfVt29fZWVltRWHDzXjH0Xmi0oqtWr7PtWeabKkyPwbb7yhH//4xyovL9eiRYu0cOHCsLyvHd14440qLi7WoUOH1LdvXz355JOaN2+e1c2yzPr163XllVfq4osvVkJCy/Kqxx9/XDNnzrS4ZeG3fft23XLLLWpqalJNTY1uu+02Pfzww8F6eZ/+WrY8TO18XyzcIqE/zp/NO3PmIL3wQkWHMoJLl47rdBKSVX3hqcj8daMvUl5OsqVF5tkZpL1I+G8lWOiL9kLQH9GxawzsxdNSpSuu6G/rnX0Mw9CHXx7xWmQ+oQd7RQLoHGGKkLPrWuCDNfV6+aOW8n6dFZkHgK4QpogqTc2G/vb5QRWVVGnNp/vV2Nx1kXkA6AphipCyy+bt+46f1vLSai3fdLbI/K3/ZN8i8+f3W319UKcrAAgywhQhY/Xm7Y1NzXpv1wEVlVapuOyAmg1p0qX99eDM4Zo+cqC6x9lzFOqp31yuJhUWVtjycjkAwhQhZNXm7ZWHa7VsU6VWbKrWgZp6DUjorrtyL9Hc8SlKSbT/+l1P/WYYcuym90A0IEwRMuHcvN1Tkfmp6QOUl5OiqekX+l1k3kqRtuk9EA0IU4RMODZv332gRn8uqdIrH1XraG2DhvS9QD+d3lJkfnCfwIvMm2XmXjGb3gPOQ5giZAoKMjtURArG5u2nzzRp9cf7VFRSqU0V7YvMX3lpf8UEoci8GWbvFXvqN5dLjt30HogGhClCpjU4gjWbN5xF5s0we6/YU7/V18dyvxSwMcIUIWW2YIOnIvOzRg3W3OzkkBaZNyMY9zzP77f09OguZA7YnaPC1C5rFhFahmFo97EmvfHStrYi88MHJeiR60Zqzpgk9XHbu7wf9zyB6OOYMLV6zSJCr7XIfFFJlcr218ndbZ+uG32RbpyQosuT+thyFOpJqO4VA7Avx4SpVWsWEVqGYeiDvx/RstKzReYvT+qjWzO66f4bpqpXd8d8RNsE+14xAPuz5ZnK0+Vc1t5FlnOLzH+87phO/K1RDScMDb6oh27492QNGfKlI4O0lV2L+wMIDdudrbxdzv3a17rp8OEzHY7nPpRzeCoyP/BAd51c06SGupbas/v21Gn+/M36yU/cYotGAE5huzD1djn3ggti5HbHch/KgTorMj8t539VX9fc7vja2ib97nen9NhjFjUYAPxkuzD1dtn2yJEG/fGPOdyHcghfi8x7+30fONDs8XEAsCPbhWlnywq4D2V/FYdPaVlplV7afLbI/A9yL9UN45M9Fpn39vseMMA5tXQBwHZhyrIC56lvbNJbn+zXsgCKzHv7fd9xB/fCATiH7cKUZQXOEYwi895+30OGfBnKpgNAUNkuTCWWFdiZpyLzMzIGam524EXmPf2+i4sJUwDOYcswhf3s2HNcy0rPFpm/2KZF5gHACoQpvKqpa9Dr2/aqqKRKH+85ru5xMZpp8yLzAGAFwhTtGIahjyqPqaikUqu279PpBmcVmQcAKxCmkNRSZP6Vj/aoqLRSn+0/KXe3WH3zcucVmQcAKxCmUay1yHxRaaX+ek6R+cfnjNI3sy5ydG1cAAgnzpZR6GBNvV7aXK1lpZUqP1yrhB5xystOVl52ikZe1Nvq5gGA40RkmLKJeEeeisznpH1NP7p6mL6ROVgXdIu1uokA4FgRF6ZsIt7e+UXmv9azm267Ik1zs1N06YBeVjcPACJCxIUpm4hLDU3NWutDkXkg2LgqhGgVcWEazZuItxaZX7G5Wgd9KDIfbJxIoxtXhRDNIm5rDm+bhYd7E/HCwgqlpa1WTMwKpaWtVmFhRUjep76xSa9v26ubfvuBpvyyWEvWfaHRQ/rotzeP1/sPXKX7r0kPKEj9bX/ribSiolaGcfZEGqqfG/bT2VUhINJF3MjUDrvOhOMvdE9F5u+bfpm+Mz5Zg/r0MPXagbSfy+uI5qtCQMSFqR12nQlVsISiyLwngbSfEyk624sYiHQRF6aS9bvOBDtYwl1kPpD2cyKFHa4KAVaJyDC1WjCCxVuR+bzsZOWEuMh8IO3nRAo7XBUCrBLRYWrV7NJAg8UwDG2uOGp5kflA2s+JFJL1V4UAq0RsmFo5Td/fYGktMv//NpzWnrfel7tbrP456yLl5VhTZD7QYORECiBaRWyYWj27tKtg8VRkfmifGD0+J9MWReYJRgDwXcSGqV1nl3ZWZP7AZx8pd0KKpe0DAPgvYsPUTrNLOysyP3PUYPWIbynvd+CzsDcNABAEERumdphduvfYaS3fVKUVm6opMg8AESxiw9TM7FIzs4Abmpr13q4DKiqp1LrPDqrZkK4c1l+/mDlC00cOVLe4iKvgCABRL2LDVApsEk2gs4DPLzI/sHdLkfm52clK/hqFCyIVxf0BSBEepoHwZxZwfWOT3vpkv4pKKvX+F4cV45Kmpg9QXk6KpqZfqLhYc6NQTtT2xi4pAFoRpufxZRbw5/trVFR6tsh8Ur/gFZlvxYna/qxefgXAPgjT83ibBZyUfIFWbKpSUWmVNlccVXysS9NHDlRedoomBbHIfCtO1PZn1+VXAMKP2TDnKSjIlNsd2+6xuO4uGeMMLXhpu46eOqNfzByujQ9erf/OH6fJl10Y9CCVOFE7QSB7565YsUIZGRmKiYnRpk2bQtU0AGFGmJ4nPz9Vz/5XlhIHdZMkxfZ2qf+13fQvc5NVNH+i3r1viuZPviQku7Wcyy6bnMM7T394dbX8KjMzU6+88oomT54c6uYBCCMu8/6DYRj6qPJYS5H5L/ap1y1xGj+on27MSdG3soaErch8Kzusk0XnAll+NWLEiHA1D0AYOTpMgzHbtbXIfFFppT7bf9LyIvOt2IXFGahhDECSXIZh+Hzwxo0bjfr6+qC9+cmTJ9WrV2CVgNasqdPTT9fo3OZ07y7df3+Cpk3rfEatYRjadaRZ66obtGl/kxqbpaF9YjQlKU4TBsfpgjhrAtRMf0QaJ/fFfffdpyNHjnR4fN68eZo0aZIk6cc//rHuuusupaene32dlStXatWqVZKko0ePavny5aFpsAM5+fMRbPRFe8Huj9zcXJ8Cwa8wleTXwV0pLi5Wbm5uQM9NS1vtcdZtaqpb5eWzPD7HU5H5OWOGKC87RSMv6h1QO4LJTH9Emkjvi9zcXD399NMaP368T8enp6errKwsxK1yjkj/fPiDvmgvBP3hU5g69jKvr7NdfS0yb7XCwgrdd99hHTiwgku6AOAwjg3TrnaFcVKR+bMFGpolUaAhkr366qu65557dPDgQc2aNUtZWVl66623rG4WAJMcG6beZrvOvStZt/2+pEOR+WkjB6h7nD1GoeejQEP0mDNnjubMmWN1MwAEmWPD9PzZrn0ujFe/yfFadrRKA5u664dTL9UN451RZD6QAg3U7QUA+3BsmNY3NikhM17/tDBR+kKKcUlXDR+gvOwU5QahyHw4+buROXV7AcBeHBemn++v0Z9LqvTKlmodC1GR+XDzt0ADl4UBwF4cEaa1Zxq1evu+dkXmZ4wcpLnZySEpMh9urQF4332bdOBAc5eXbanbCwD2Yusw3bHnuIpKK/Xalr2qqW/Uxf176hczh+v6sUkhr40bbvn5qRoy5Euf1kf5e1k42nA/GUC42S5Ma+oa9Pq2vSoqqdLHe46re1yMZo4arLzsZOUM/Zpl5f3shLq93nE/GYAVbBGm7YrMb9+n0w1NGj4oQYu/mWFJkXm7o26vd9xPBmAFS8P05BlDz63/0nZF5p2AAuuecT8ZgBUsC9MHX/lYKzbVqrF5py5P7qsnrx+l2ZdfpF7dbTFYhkNxPxmAFSxbjNmre6ymJMXpr/deqdd+eIXyclIIUpgWyIbd/igsrFBa2mrFxKxQWtpqFRZWBOV1ATibZWG6cNZIfW9kd40YbP1uLXbFidt/+fmpWrp0nFJT3XK5WnYRWrp0XFAuibdObqqoqJVhnJ3cxO8FAENBm2JWauBCdT+ZyU0AvHFOzb0o09mJ2xtGsqHF5CYA3hCmYeZr4Pl74uYSZOh5m8TE5CYAhGkY+RN4/p64AxnJwj+hntwEwLkI0zDyJ/D8PXFzCTL0Qjm5CYCzMQEpjPwJPH+rHLG+MjwolgHAE8I0jPwNPH9O3NTrBQDrcJk3jEJ5z41LkABgHUamYRTqAvVcggQAaxCmYUbgAUDk4TIvAAAmEaYAAJhEmAIAYBJhCgCASYQpAAAmEaYAAJhEmAIAYBJhCgCASYSpA7EJOADYCxWQHKZ1T9TWgvate6JKorISAFiEkanNnT8KvfferWwCDgA2w8jUxjyNQr1hE3AAsA4jUxtbuHBHh1GoN2wCDgDWIUxtzNfRJpuAA4C1CFMb8zbaTEyMZxNwALAR7pnaWEFBZrt7plLLKPSZZ8YQngBgI4xMbSw/P1VLl45jFAoANsfI1Oby81MJTwCwOUamAACYRJiaQFk/AIBEmEoKLBRbCypUVNTKMM6W9SNQASD6RH2YBhqKngoqUNYPAKJT1IdpoKHoraACZf0AIPpEfZgGGoreCipQ1g8Aok/Uh2mgoVhQkCm3O7bdY5T1A4DoFPVhGmgoUlABANAq6os2tIbfwoU7VFlZq5QUtwoKMn0KRQoqAAAkwlQSoQgAMCfqL/MCAGAWYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQqE0YIFCzR8+HCNHj1ac+bM0bFjx6xuEoAgIEyBMJo+fbp27Nih7du367LLLtMTTzxhdZMABAFhCoTRjBkzFBfXUhJ74sSJqq6utrhFAIKBMAUs8txzz+kb3/iG1c0AEAQuwzB8Pnjjxo1GfX190N785MmT6tWrV9Bez+noj7Oc3Bf33Xefjhw50uHxefPmadKkSZKkF198UWVlZXr00Uflcrk8vs7KlSu1atUqSdLRo0e1fPny0DXaYZz8+Qg2+qK9YPdHbm6u5/9Az+NXmEry6+CuFBcXKzc3N5gv6Wj0x1mR3BcvvPCClixZonfffVdut9un56Snp6usrCzELXOOSP58+Iu+aC8E/eFTmLKfKRBGb775pv793/9d69at8zlIAdgf90yBMLr77rtVU1Oj6dOnKysrS9///vetbhKAIGBkCoTR7t27rW4CgBBgZAoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEKQAAJhGmAACYRJgCAGASYQoAgEmEaZgVFlYoLW21YmJWKC1ttQoLK6xuEgDApDirGxBNCgsrNH/+ZtXWNkmSKipqNX/+ZklSfn6qlU0DAJjAyDSMFi7c0RakrWprm7Rw4Q6LWgQACAbCNIwqK2v9ehwA4AyEaRilpLj9ehwA4AyEaRgVFGTK7Y5t95jbHauCgkyLWgQACAbCNIzy81O1dOk4paa65XJJqaluLV06jslHAOBwzOYNs/z8VMITACIMI1MAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBcLooYce0ujRo5WVlaUZM2Zo7969VjcJQBAQpkAYLViwQNu3b9fWrVs1e/ZsPfroo1Y3CUAQEKZAGPXu3bvt36dOnZLL5bKwNQCCJc7qBgDRZuHChfrDH/6gPn36aO3atVY3B0AQuAzDsLoNQERxuVxrJA3y8K2FhmG8ds5xD0rqYRjGIi+vM1/S/H982cMwjMygNxZAUBCmgEVcLleqpNWEJOB83DMFwsjlcg0758tvStplVVsABA8jUyCMXC7Xy5LSJTVLqpD0fcMw9ljbKgBmEaYAAJjEZV4AAEwiTAEAMIkwBQDAJMIUAACTCFMAAEwiTAEAMIkwBQDAJMIUAACT/j/+Eo00nO5RBgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import mglearn\n",
    "\n",
    "mglearn.plots.plot_linear_regression_wave()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6315f00a",
   "metadata": {},
   "source": [
    "上图是训练数据在对wave数据集在线性回归模型上的测试图，测试的目的是使数据在模型上预测出的结果与标准的答案的均方误差最小"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8bc2998d",
   "metadata": {},
   "source": [
    "用于回归的线性模型可以表示为：对单一特征的预测结果是一条直线，对两个特征时是一个平面，或者在更高维度（特征）时是一个超平面。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b7236eca",
   "metadata": {},
   "source": [
    "##### 2. 线性回归（普通最小二乘法）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7706d940",
   "metadata": {},
   "source": [
    "线性回归又叫**普通最小二乘法**，是回归问题最简单也是最经典的线性方法，线性回归寻找参数$x$和$b$，使得对训练集的预测值与真实的回归目标值$y$之间的**均方误差**最小。均方误差是预测值与真实值之差的平方和除以样本数\n",
    "\n",
    "线性回归没有参数（LinearRegression()初始化类时），这是一个优点，但也没办法控制模型的复杂度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d1b2f723",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lr.coef_: [0.39390555]\n",
      "lr.intercept_: -0.031804343026759746\n"
     ]
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "X, y = mglearn.datasets.make_wave(n_samples=60)\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 42)\n",
    "\n",
    "lr = LinearRegression().fit(X_train, y_train)\n",
    "print(\"lr.coef_: {}\".format(lr.coef_))\n",
    "print(\"lr.intercept_: {}\".format(lr.intercept_))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4fabcb1f",
   "metadata": {},
   "source": [
    "sklearn总是将从训练数据中得出的值保存在以下划线结尾的属性中，例如上述代码中的coef_和intercept_，线性回归的模型都有这两个参数"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7b85b01d",
   "metadata": {},
   "source": [
    "intercept_属性是一个浮点数，而coef_属性是一个Numpy数组，每一个元素对应一个输入特征。这里coef_只有一个元素是因为wave只有一个输入特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "f3cbe606",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.67\n",
      "Test set score: 0.66\n"
     ]
    }
   ],
   "source": [
    "print(\"Training set score: {:.2f}\".format(lr.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(lr.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f54281ad",
   "metadata": {},
   "source": [
    "$R^2$的结果约为0.66，结果并不是很好，并且我们看到训练集和测试集的$R^2$分数非常接近，所以可能存在的是欠拟合，而不是过拟合。因为对这个一维数据集来说，过拟合的风险非常小，因为模型非常简单"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bcee7fbb",
   "metadata": {},
   "source": [
    "现在我们对波士顿房价数据集进行预测，该数据集有506个样本和105个导出特征。（线性模型对于有大量特征的数据集有更加强大的表现）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4582baca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.95\n",
      "Test set score: 0.61\n"
     ]
    }
   ],
   "source": [
    "X, y = mglearn.datasets.load_extended_boston()\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 0)\n",
    "lr = LinearRegression().fit(X_train, y_train)\n",
    "\n",
    "print(\"Training set score: {:.2f}\".format(lr.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(lr.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "94e0dc00",
   "metadata": {},
   "source": [
    "通过比较可以发现，在测试集上的数据分数很高，但在训练集上就不行了，这是明显的过拟合的标志。我们必须要找到一个可以控制复杂度的模型，标准线性回归最常用的替代方法之一就是**岭回归**"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7864ff67",
   "metadata": {},
   "source": [
    "##### 岭回归"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fdb4896",
   "metadata": {},
   "source": [
    "岭回归也是用于回归的线性模型，因此其预测公式与最小二乘法相同。但岭回归唯一的不同就是：其会对$w$参数附加约束，其意味着每个特征对输出的影响是可控的。（最小二乘法之所以会有过拟合现象是因为没有对$w$附加约束，使得模型训练精度过高，测试精度低，拟合度小（**测试数据量多时可能将不会有这种情况**））\n",
    "\n",
    "对模型的这种约束是所谓的正则化。**正则化**是指对模型做显示约束，以避免过拟合，岭回归用到的便是L2正则化。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4c463daa",
   "metadata": {},
   "source": [
    "岭回归在sklearn.linear_model.Ridge中实现，下面是其对波士顿房价数据集的测试"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c4da0f31",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.89\n",
      "Test set score: 0.75\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import Ridge\n",
    "\n",
    "ridge = Ridge().fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(ridge.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(ridge.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "994cbaa8",
   "metadata": {},
   "source": [
    "可以看出，Ridge在训练集上的分数要低于LinearRegression，但在测试集上的分数更高。线性回归对数据存在过拟合现象，但很明显Ridge是一种约束性更强的模型，所以更不容易过拟合。复杂度小的模型意味着在训练集上的性能更差，但泛化性能更好。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4955e8d1",
   "metadata": {},
   "source": [
    "Ridge模型在模型的简单性与训练集性能之间做出权衡。简单性和训练集性能二者对模型的重要程度可以通过用户设置的alpha参数指定。增大alpha参数会加剧约束程度，即$w$会更趋近于零。反之则减少约束程度，当Ridge模型中的alpha参数过小时，其性能与LinearRegression差不多"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "9cd8d52d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.79\n",
      "Test set score: 0.64\n"
     ]
    }
   ],
   "source": [
    "ridge10 = Ridge(alpha=10).fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(ridge10.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(ridge10.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ffe24bab",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.93\n",
      "Test set score: 0.77\n"
     ]
    }
   ],
   "source": [
    "ridge01 = Ridge(alpha=0.1).fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(ridge01.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(ridge01.score(X_test, y_test)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b0ce349",
   "metadata": {},
   "source": [
    "下面查看当alpha参数取不同值时特征值的$w$参数："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "9fbc4bf5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x154d2742f60>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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b775JkVFReTn57N9+3YAzpw5w5gxY9izZw/XX389zz77rOX7X4bwE0IIIWwmw/R1XuEcoWfWrFkAjBgxgpKSEgD+9re/sXfvXrZs2QJARUUFxcXF9OvXjxUrVvDOO+/gcDj45ptvfNndSy65hDFjxvht+4YbbuDIkSMkJyf7ykV27txJYWEhI0eOBKCmpobk5GQ++OADxo4dS69evQCYO3cuhw4d8m1r7ty5OJ1OX/teeeUVX0a+traWr776iquvvpqf//znHD58mFmzZjFw4ECGDRvGT37yE5YvX87UqVO57rrr/NqYn5/PuHHjSEpKAmDevHm88847zJgxgy5dujB16lTf/tmxY4cFe9yfBNlCCCGEEDaJSUnxlIroLLdb165dAXA6nb56Z6UUTz75JJMmTfJbNzc3l2PHjlFYWEhsbCz9+/entjED371794Btv/XWW3Tv3p358+ezevVqHn/8cZRS3HnnnTzyyCN+627bti1oO5tuXynF1q1bGTRokN86gwcPZvTo0fz5z39m0qRJ/O53v+PGG2+ksLCQv/zlL/zXf/0XEydOZPXq1X7bMhIbG4umaQH7x0pSLiKEEEIIYZNIG6Fn0qRJPP3009TX1wOeUo0zZ85QUVFBcnIysbGxvPXWWyGNGNKtWzfWrVvHH//4R06ePMn48ePZsmULR48eBeDkyZN8+eWXjBo1il27dnHq1ClcLhdbt24N2r4nn3zSFyB/9NFHAHz++edceumlLFq0iGnTprF3715KS0uJj4/ntttu4yc/+Qkffvih37ZGjx7Nrl27OH78OG63mz/96U+MHTu2VfutNSSTLYQQQghhE29H4aNr1+EqKyMmJYXkpUva3IG4urqafv36+X6///77Q3rc3XffTUlJCcOHD0cpRVJSEtu3b2fevHlkZWWRmZlJRkYGV1xxRUjbS0lJ4bvf/S7r169n1apVPPzww0ycOJGGhgZiY2NZv349Y8aMYcWKFYwePZrU1FSGDBlCYmKi7vZWrVrFkiVLSEtLQylF//79efXVV9m8eTPPP/88sbGxXHDBBaxevZr8/HyWLVuGw+EgNjaWp59+OqBtjzzyCDfccANKKf793/+d6dOnh/S6rKAFS6VHi8zMTOXtRSqEEEIIYacDBw4wePDgcDcjqlRVVZGQkIDL5WLmzJncddddzJw5M9zNapHee61p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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.figure(figsize=(12, 6))\n",
    "plt.plot(ridge.coef_, 's', label=\"Ridge alpha=1\")\n",
    "plt.plot(ridge10.coef_, '^', label=\"Ridge alpha=10\")\n",
    "plt.plot(ridge01.coef_, 'v', label=\"Ridge alpha=0.1\")\n",
    "plt.plot(lr.coef_, 'o', label=\"LinearRegression\")\n",
    "\n",
    "plt.xlabel(\"Coefficient index\")\n",
    "plt.ylabel(\"Coefficient magnitude\")\n",
    "plt.hlines(0, 0, len(lr.coef_))\n",
    "plt.ylim(-25, 25)\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5f49e49d",
   "metadata": {},
   "source": [
    "这里x轴对应coef_的元素，共有105个（大概是）,也就是特征值的个数。图例为：x=0时对应第一个特征的系数，x=1对应第二个特征的系数，以此类推，y轴即代表该特征的预测值，即$w$，也就是斜率。这个图可以明显的看出alpha参数对模型的印象"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a824e69",
   "metadata": {},
   "source": [
    "还有一种方法可以理解正则化的影响，那就是固定alpha值，但改变训练数据量。接下来对波士顿房价数据集做二次采样，并在数据量逐渐增加的子数据集上分别对LinearRegression和Ridge两个模型进行评估。下面是岭回归和线性回归在波士顿房价数据集上的**学习曲线**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "b7656227",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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tampqRH7+vqaw8LCTFqtlq1bt85tozgmTJjQmJeX552bmysHgDfffDO4PZ8LDAy0rF27tuijjz7q5zjyCQCCgoIsiYmJ2rVr1wYBwE8//eR14sQJJQAEBwebExIStG+//XYQAOzcudNeFhgYaMnKymp88skn7dclTp48KW2+/d6kN/wWOmLOnDl1X375ZXBhYaEUEPrqf/nlFy8AqK+vl0RHRxukUin27Nmj2Ldvn297t3vnnXfWXnHFFeply5aFA8CsWbPq3n333X62bh+tVst+++03JSCc9HzwwQchgNAttGXLloDWtjt48GCdQqGwrFmzJsi27MCBA4qamhpRYWGhVCKR4NZbb61bu3btuZqaGklFRYUkNzdXHh0dbVy0aFH1M888U3ro0CHv5tudPHmy+uOPPw7W6/VMr9ez9evXB0+aNOmSlkdPRIGik+69996y7OzsZNsFzObl119/fX1sbKw+ISEhPTs7O3HQoEEad9UlOjra9MorrxTNmjUrcdiwYSlarVYkkUi449lUa0aOHKm96qqrapcvXx7evOyjjz46/dZbb/VTqVSpa9euDR08eHCTY9maNWvC0tLSUtesWROanJysCQwMNAPA559/fio/P1+RlJSkSkpKUl1//fUJ1dXVvTZQ9OTfwvbt2/3DwsIG2R5/+ctfItq7r5kzZzY++eSTJVdfffXA5ORkVVJSUtrXX38dAABPP/106bp160LT09NTly9fHpGVlXVZB86XXnqp5Isvvgg+e/as5IEHHqi5/vrrq8eOHZuclJSkGjRokGr79u0+APDCCy+cr6yslAwcODDt+uuvj8/Kymr09/dvsRkmlUqxYcOGk19++WVQUlKSauDAgWn33XdfjF6vF+3bt0+ZlZWVkpycrBo2bFjqokWLyuLi4ozr168PTE5OTktNTVUtXrw4ZsWKFZeMDly6dGllWlqaNj09XZWenq5KS0vTLlmypPJy/t7uiobH9jK1tbWiwMBACwCsXr06eN26dSH79u1zeZeKjVqtFvn4+FhEIhH27dunmDp1anJBQUFuaGho630lpEt09W/Bk/R6PTObzfDy8uI1NTWiUaNGpaxYseLcnDlzetwZfXccHttrz+76qhdeeKHft99+G2Q2m5m/v7/pnXfeKXLn/n744QefJ554Isp2wvHaa68VUZDoHrr6t+BJVVVV4mnTpiWazWam1+vZddddV9MTg0R3RS0KQgjpRrpji4KuURBCCHGKAgUhhBCnKFAQQghxigIFIYQQpyhQdFJnUku3dxuMsUxbIrakpCTVJ598Yk/x7SzNcWvpo4l7dNVvoaXEfikpKarGxkbXTsV2YsmSJRFBQUGDU1JSVPHx8WlXX311vFqt7rbHE3ekZ+9Luu0/bE+xatWqcMdsqu7axp49e/ILCgqOPvfcc8ULFy4cYDQKWZcfffTRymeeeaZb3Yi9r+qq30JL8vPzj/r4+HTJEEZb6om5c+dW5+fnHz127NjR0tJS2YsvvujS+zLYfuOuEBcXZ/zjjz+Ou2yDfQwFik5oKbV0TU2N6MYbb4y1pda+4447om3/sZYuXRoeHx+flpKSokpNTVVVVVWJW9qGs31eeeWVDRqNRlRZWSkBLk5zrNPp2Pz582Pj4uLSR40albR79257mgGdTsfmzZsXGxcXl56ZmZm8YMGCGMfWRmvpm0n7eOK34MixpREZGZmxePHiiCFDhqRERkZmPP/88/Z8Uq2l1wacp0BPSUlR3XbbbdGDBw9O+fLLLy+6aZVCoeAjRoxoPHv2rD1N/bZt27xHjhyZlJaWlpqWlpb62Wef2T/z/PPPh8bGxqanp6enPvzwwxG2tOm2FOpLliyJyMzMTF61alWoTqdj9957b1RGRkZqSkqKas6cOfG2v/Pll18OGTBgQFpKSooqKSlJdeDAAYXZbMYtt9wSY7v50bBhw1Ict22rw1dffeWXmpqqSkpKUo0ePTrJluqkrXTqfVWPPhj89atD0cfLGrzcse2k/r6al+YOPudsnZZSS994442x48ePb/j888+LzGYz5syZE7969eqQBQsW1L711lv9y8vLD/r4+PDa2lqRj4+PpbX01K1Zv3594KhRoxoiIiIuySi2cuXK0KKiIllBQUGewWBgo0ePTo6KitLbyoqLi2UnTpzINRqNbPTo0cnh4eEGwHn65o59ex7wzQPRqDjqlt8C+qk0mLOm2/0WnNFoNKKDBw/mFxQUyIYOHZr2wAMPVHt5eVnmz58/oKX02kOHDtU5S4F+4sQJ5RtvvFH00UcfnQOAPXv22E9CamtrRb/++qvvs88+WwIIk98eeOCB2JycnBOxsbHGoqIi6YgRI1KnTJmSV1hYKHv11VfDDx48eDQiIsJ05513XpTRtq6uTpKamqp95ZVXSgHg0UcfDff39zcfOXLkGADcd999kU8++WT466+/XrJ8+fKoAwcO5A0cONCo1WqZyWRiv//+u3Lnzp1+hYWFuWKxuMV04CUlJZJ77rkn/ocffijIzMzUrVq1KmT+/Pnxhw8fzgdaT6femX+Pnq5HB4ru6Pvvvw84cOCA9+uvv94fAHQ6nSgiIsIYGBhojo+P11133XUDpk2bVj937tx6W3qF9hg+fHhKU1OTuKamRrJly5YW0zBs377d95ZbbqmWy+VcLpfzG264ofrXX3/1sZXNnz+/WiqVQiqV8rlz59bs2rXLB3Cevpl0nLt+C+1xyy231ABAcnKywc/Pz3zq1CmZxWJBa+m1rYGi1RToMTExuilTpjQ57uOrr74K3r59u9/Zs2flkyZNqrel3v7xxx99iouLZdOnT7ff/4MxhqNHj8p37NjhM2nSpHrbic4999xT9d///teenE8ul/O77rrLfh+JzZs3BzQ2Noo2bNgQCAAGg4GpVCotAIwaNaphwYIF8VdddVXdtddeW6dSqQwpKSkGs9mMG2+8MS47O1t9ww03XHIXxu3bt3unpqZqMzMzdQCwaNGiqsceeyymtrZWBLSeTr0v69GBoq0zfk/gnOObb745qVKpDM3LDhw4cGzr1q0+P/zwg9/w4cNT//e//52w3ZSlLbazzKeffjrspptuSjh58mSuLbe9476d1ctJuvBW0zf3GG2c8XuCu34L7aFUKi9Jac0YazW9dlsp0L29vS8JZHPnzq1+++23i8+ePSu54oorUl566aXQxx57rJJzjuTkZO3evXsvOaHZvn27j7N04Eql0ux4m1LOOVavXn129uzZl6Tj2LJlS+H27du9vv/+e78pU6Ykv/rqq0U33HCDuqCgIG/Tpk2+33//vd/y5cuj9u7de9Hfa/1/0up/ltbSqfdldI2ik5qnlp46dWrds88+G27riz5//rwkPz9fVltbKyotLZVeddVVjatWrSpNTEzUHjhwQNnSNpxZtmxZeXBwsGnlypWX3McgOztb/e9//zvYaDSisbGRffnll/b+5wkTJjR8+umnQUajERqNhv3nP/+xn8U5S99M2q+rfwuXy1l67c6kQI+JiTGtWLHi3MqVK8M1Gg2bPHlyY1FRkfx///ufPaX49u3bvSwWC6ZMmdKwbds2//Pnz0sA4L333nOa/nzm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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import mglearn\n",
    "\n",
    "mglearn.plots.plot_ridge_n_samples()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f5b59394",
   "metadata": {},
   "source": [
    "如上图所示，无论是Ridge（岭回归）还是LinearRegression（线性回归），所有数据集的训练分数都要高于预测分数。由于岭回归是正则化的，所以岭回归的训练分数都小于线性回归的训练分数。但是岭回归的测试分数普遍高。\n",
    "\n",
    "当数据集的数据点较少时，如上图，小于400个数据点时，线性回归并不能学到任何东西。当数据量越来越多时，两个模型的性能都在提升，并且最后线性回归的性能追上了岭回归。当数据量足够多时，其实正则化就不那么重要了，并且两个模型的性能将近乎相同。（上图测试性能相同时刚好发生在数据完时，这里是个巧合）。\n",
    "\n",
    "图中当数据量增多时，可以发现线性回归的训练性能（精度/正确率）正在下降。如果数据继续增多，模型将更加难以过拟合或记住所有数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67c849d2",
   "metadata": {},
   "source": [
    "##### lasso"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "50f2bbb8",
   "metadata": {},
   "source": [
    "处理Ridge，还有一种正则化的线性回归模型是Lasso。与岭回归相同，也是约束$w$系数使其接近于0，但lasso是L1正则化。L1正则化的结果是，使用lasso时会让某些系数刚好为0，也就是有些特征会被模型完全忽略。这可以看做是一种自动化的特征选择。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de9c7b59",
   "metadata": {},
   "source": [
    "接下来将lasso应用在扩展的波士顿房价数据集上："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "62069583",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.29\n",
      "Test set score: 0.21\n",
      "Number of features used: 4\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn.linear_model import Lasso\n",
    "\n",
    "lasso = Lasso().fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(lasso.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(lasso.score(X_test, y_test)))\n",
    "print(\"Number of features used: {}\".format(np.sum(lasso.coef_!=0)))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c6d2c6a",
   "metadata": {},
   "source": [
    "这里可以看到，模型只使用105个特征中的4个，并且测试和训练的性能都非常差，说明存在欠拟合。\n",
    "\n",
    "Lasso模型也有跟Ridge一样设置约束程度的系数alpha，为了降低欠拟合程度，我们将减少alpha,同时还需要增加max_iter的值（运行迭代的最大次数）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "bc6014ca",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.90\n",
      "Test set score: 0.77\n",
      "Number of features used: 33\n"
     ]
    }
   ],
   "source": [
    "lasso001 = Lasso(alpha=0.01, max_iter=100000).fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(lasso001.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(lasso001.score(X_test, y_test)))\n",
    "print(\"Number of features used: {}\".format(np.sum(lasso001.coef_!=0)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "8e2549cf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training set score: 0.95\n",
      "Test set score: 0.64\n",
      "Number of features used: 94\n"
     ]
    }
   ],
   "source": [
    "lasso00001 = Lasso(alpha=0.0001, max_iter=100000).fit(X_train, y_train)\n",
    "print(\"Training set score: {:.2f}\".format(lasso00001.score(X_train, y_train)))\n",
    "print(\"Test set score: {:.2f}\".format(lasso00001.score(X_test, y_test)))\n",
    "print(\"Number of features used: {}\".format(np.sum(lasso00001.coef_!=0)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "8e0aeb6f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Coefficient magnitude')"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtkAAAGVCAYAAAArP+0UAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzs3Xt4VNW5P/DvmplcCJdwS0ICEqgGSIQEISKlFhRqlWoUK/VSbavHVgbbUtBabVVEOfao9QLUy9FjFW1t7Q8qYqpSW9AotqhBUTEBIsg1CQmXhEDIZSbr98dkh5lkZjI72Xv27ft5nnlCVoaZNTN773n3u9+1lpBSgoiIiIiItOMyugNERERERHbDIJuIiIiISGMMsomIiIiINMYgm4iIiIhIYwyyiYiIiIg05jG6A1rYvHlzusfjeRbAePDEgYiIiLrXBmCrz+f78eTJk2uM7gzZjy2CbI/H8+ywYcNy09LSjrpcLs5JSERERFG1tbWJ2travOrq6mcBXGp0f8h+7JL1HZ+WlnaMATYRERHFwuVyybS0tHoEroITac4uQbaLATYRERGp0R472CUWIpPhhkVEREREpDEG2RpJSUk5y+g+dHbFFVeMev755wf19j5qPffcc4POOOOMM10u1+R33303RcvHNho/51MOHjzonjZtWk52dvb4adOm5dTW1rrD3e/3v//9kOzs7PHZ2dnjf//73w9R2n/+858PHzZsWL4Z39PeMOPrseo28t5776WMGTMmb+TIkeOvv/7609ra2qI+7ieffJI8ceLEcYmJiZMWL16coeVrMZrb7Z48bty4vJycnDNnzpx5xqFDh9wAsHv37oSLLrroa+H+z5QpU8bqeQzevn17Yk5Ozpm9vU9PRNpmgtn5u4iswXFB9sT73ioYdcfrkzvfJt73VoHRfbOLiRMnnvzb3/72ZWFh4XGj+4K6fQl45ryxqN9vi0G+ZnLPPfdknnfeeQ179uzZet555zUsXrx4WOf7HDx40P3ggw9mffjhh+WlpaXlDz74YJYSEM2ZM6fugw8+KI9/zwMuXXNp7oQXJkzufLt0zaW5RvXJbnq7jdx8883ZTz755J7du3dv3bVrV/Lq1asHRHvc9PR03/Lly/fOmzfvYHxfaagjf3l5cMU3p08oz82bXPHN6ROO/OXlwb19zKSkpLZt27aVVVRUfDFw4EDf7373uzQAGDVqVOu6det29b7X1hFtmwlmqu8iciTHBdl1ja1hg61I7b3x5z//OTU/P39cbm5u3rRp08bs27fPAwCvv/56v3HjxuWNGzcuLzc3N+/o0aOuPXv2JBQWFo5VMhXr1q3rBwBPP/304DFjxuTl5OScOX/+/OHhnueXv/xl5vjx43NzcnLOvOaaa7KVbE+w4cOHT5g/f/7wCRMm5E6YMCF369atScrfSkpK+p111lnjRowYMUHJZNXX17u+/vWvj8nLy8sdM2ZM3p/+9KeBsb7uSZMmNRUUFDSrfLv0seG+TFRu6Yf192Xp9RRO/ZzXrVs3cN68eYcBYN68eYfffPPNLlnQV199NXX69OnHMjIy/Glpaf7p06cfe+WVV1IBYNasWSeys7NbY30+reUNyTvhEZ6QsRwe4ZFnDj3zhNbPxW1E/TayZ8+ehOPHj7u+9a1vnXC5XLj22msPv/rqq4OiPe7w4cN9M2bMaExISDBsjM6Rv7w8uOaBB7J9tbWJkBK+2trEmgceyNYi0FZMnTr1xIEDBxKB0Ezx8ePHxSWXXPK1MWPG5F188cVfa2pqEsr/eeyxx4aOGjVq/JQpU8ZeffXV2T/84Q9HAkBlZaXnwgsvPH38+PG548ePz33rrbf6dn6+7du3J06ePHlsXl5ebl5eXu4///nPLvdZsWLFkFmzZp3+zW9+M2fUqFHjb7311kzlb36/H1dffXX2GWecceY3vvGNnOPHjwsAeOSRR4aOHz8+d+zYsXkXXnjh6Q0NDTHFJNGOK8FM9V1EjuS4IDueLrjgguNbtmzZVl5eXjZ37twj99133zAAeOSRR4atWLFiz7Zt28o2bdq0rV+/fm3PPffc4FmzZtVv27atrLy8/Itzzjmncffu3QlLliwZ/s477+woKyv74pNPPun7xz/+scsX3G233VazdevW8oqKii9Onjzpevnll7scbABgwIAB/s8//7x83rx5NT//+c9PU9oPHjyYUFpaum3t2rUV99xzz3AASElJaXv99de/LCsrKy8pKdnxm9/8ZoTyhT158uSxSmAQfHv11Vf76/JG9lTdvgR88epQQAJfvDpUr2y2Uz/nw4cPe5QgOTs7u/XIkSNd3t8DBw4kjBgxokX5ffjw4S0HDhxI6NUbrpEFkxZUCSFC2lzChQWTFlRq/VzcRtRvI3v27EnIzMzsOAnLzs5uqaqqSoj1cY1y+Mknh8vm5pDvVtnc7Dr85JNhT4zU8vl8ePvtt/vPmTOnrvPfHn744fQ+ffq07dixo2zx4sVVZWVlfYFAScnDDz+c+cEHH5S/9957OyoqKpKV/zNv3rzTbrnlloNbt24tX7NmzU6v1zuq8+NmZWX53nvvvR1lZWXlf/3rX3ctWrRoZLi+ffbZZ31XrVq1a+vWrV+89tprg5USjb179yYvWLCg5ssvv/wiNTXV/+KLLw4CgGuvvfbo1q1by7dv3142duzYkytWrBgKAE899dTgcNuVUhZj5uMKUTDTHJjs6KuvvkqcM2fOiNra2oSWlhbXaaed1gwAU6dOPf7LX/7ytCuvvPLINddcc/T0009vmzp16ol58+aNam1tdc2dO/fotGnTTr7++usDpk6d2pCVleUDgKuuuupISUlJvx/84AchB9c333yz/6OPPjqsqanJVVdX58nLyzsJoL5zf370ox8dAYCf/OQnR+66666OL9ZLL720zu12Y/LkyU2HDx9OAALzhy5cuHDEpk2b+rlcLtTU1CTu37/fM3LkSN/mzZu36/i2aWfDfZmQ7Qkt2Qasvy8L331mr9ZPw885Mim7JhQ7B7ZGyeqX1frt7G8f+sfufwz1SZ/wCI/89qhvH8rsm+nT+rm4jUQWaRsx87YTje/QoUQ17bFqbm52jRs3Lu/AgQOJ48ePb5wzZ86xzvfZuHFjvwULFtQAwDnnnHNyzJgxjQDw3nvv9T3nnHMaMjIy/ABw+eWXH92xY0cyALz//vsDKioq+iiPcfz4cffRo0ddgwYN6rgM0tLSIm688cbssrKyPi6XC3v27ElCGOeee+6xYcOG+QHg4osvPvrOO+/0u+qqq+qGDx/ePG3atJMAcNZZZzXu3r07CQA2b97cZ/HixcMbGhrcJ06ccM+YMaMeAObPn39k/vz5RyK9F1bdNsh5mMnW0c9+9rORN998c82OHTvKHn/88T3N7dmN3/72t9XPPvvsnpMnT7qmTZuW+8knnyTPnj37+Lvvvrt9+PDhLddff/3oxx9/fEi4A0lnjY2N4tZbb81+5ZVXdu7YsaPsuuuuO9TU1BT2c3W5TjULIToePDk5uePfynM+/fTTgw8fPuz5/PPPy7dt21Y2ZMiQ1pMnT7oAi2SylSx2W2vgyNvWKvTKZjv1cx4yZIhvz549CQCwZ8+ehMGDB3cJTkeMGNG6f//+juDiwIEDiVlZWYaViHQWnM3WK4sNcBsB1G8jo0aNalUy1+3/P3HYsGGtsT6uUTxDh7aoaY+VUpO9e/fuz1taWsQDDzyQHu5+4YLNaNuPlBKlpaXl27ZtK9u2bVtZTU3NZ8EBNgDcf//9Genp6a3l5eVln3/+eVlra2vY7arzcyu/JyYmdnTA7XZLn88nAOCmm24a/fjjj+/dsWNH2e23316p7BfdZbLNflwhUjDI1lFDQ4N75MiRrQCwcuXKjtHPX3zxRdKUKVNO3n///dUTJkw4sXXr1uQdO3YkDh8+vPXWW289dN111x36+OOPU6ZPn37igw8+6F9VVeXx+XxYtWrV4PPOOy9kAEdjY6MLAIYNG+arr693FRcXR5wd4MUXXxwMAH/4wx8GnXXWWVHrTuvr691Dhw5tTUpKksXFxf0rKys7DmibN2/erhyQg29z5sxp6Nk7pYPgLLZCyWZrzKmf84UXXlj39NNPDwGAp59+eshFF13U5fL1nDlz6ktKSgbU1ta6a2tr3SUlJQPmzJnTJbNqFCWbLSCgVxYb4DYCqN9GsrOzW/v27du2fv36vm1tbXjppZeGXHbZZXWxPq5Rhtx88wGRlBQSpIqkpLYhN998QJPHHzLEv2LFir1PPPFERnNzc0hUe+655x7/05/+NBgAPvroo+QdO3akAMA3v/nNEx988EH/2tpad2trK9auXTso6P8ce/DBBzsC9n//+9990El9fb07MzOz1e1248knnxzi9/vD9m3jxo0DDh486D5+/Lh44403Bs6YMSPqgMPGxkbXyJEjW5ubm8XLL5+qWZ8/f/6RcNuVMsDT7McVIoXjykUGpiT4wg1yHJiS0Ksv16amJldGRka+8vv8+fMP3nnnnZXXXHPN6RkZGS2FhYUn9u7dmwQADz30UPq///3vAS6XS44ZM+bk3Llz65999tnBK1asGObxeGRKSor/pZde+io7O7t18eLFB2bMmDFGSilmzZpVf91114V8mQwdOtR/7bXX1ubl5Z05YsSIloKCgohfmM3NzSI/P39cW1ubePnll6OORv/xj398ZPbs2WeMHz8+98wzz2wcPXp0U6zvxYsvvjjwtttuG3n06FHP5ZdfnpObm9u4cePGilj/vyYqP+nbkcVWtLUKVH7cZcCOGvycT7n33nurLr/88tOzs7OHZmVltbz66qs7AeDdd99NeeKJJ9L++te/7snIyPDfdtttlZMnT84FgF/96leVyiVrr9c7Ys2aNYOV9/Taa6899Oijj+qSSY5mwaQFVbuP7e6jVRab28gpvd1GnnzyyT033njj6KamJnH++ecf+973vlcf7XH37t3rOfvss/NOnDjhFkLIp59+OqO8vHzr4MGDu44A1cnga64+AgRqs32HDiV6hg5tGXLzzQeUdi184xvfOJmbm3vy2WefHfStb32rI5D95S9/WXP11VePHjNmTN6ZZ57ZOGHChBMAMHr06NZFixZVnX322bnp6emtY8aMOZmamuoHgGeeeWbfj3/845FjxozJ8/v94pxzzmmYNm1aSFndwoULa6644orTX3311UHnnntuQ58+fcK+n4WFhcevuuqq0bt3706+4oorDk+fPr1x+/btEctk7rjjjsopU6bkDh8+vCU3N7fx+PHjYad47CzaNnPVVVdl//SnP62dPn16oym+i8jRRCyXIc3u008/3V1QUHDI6H6Y2fDhwyeUlpaWZ2bqk6kjc+DnTN3hNuJM9fX1rtTU1LbW1lZceOGFZ1x//fWHfvjDH2p2BWDFihVDSktL+7744ouaj3vR26effjq0oKBglNH9IPthuQgREZHN3XbbbVnjxo3LGzNmzJkjR45s7nwlhIi0x0w2ERERORYz2aQXu2Sy29ra2jh/DxEREcWsPXaIW80+OYtdguyttbW1qQy0iYiIKBZtbW2itrY2FcBWo/tC9mSL2UV8Pt+Pq6urn62urh4P+5w4EBERkX7aAGz1+Xw/NrojZE+2qMkmIiIiIjITZn2JiIiIiDTGIJuIiIiISGMMsomIiIiINMYgm4iIiIhIYwyyiYiIiIg0xiCbiIiIiEhjDLKJiIiIiDTGIJuIiIiISGMMsomIiIiINMYgm4iIiIhIYwyyiYiIiIg0xiCbiIiIiEhjDLKJiIiIiDTGIJuIiIiISGMMsomIiIiINOYxugNaGDp0qBw1apTR3SAiIiIim9u8efMhKWVad/ezRZA9atQolJaWGt0NIiIiItJRfXExah5bBl9VFTyZmUhftBCpRUVx7YMQYk8s97NFkE1ERERE9lZfXIyquxdDNjUBAHyVlai6ezEAxD3QjgVrsomIiIjI9GoeW9YRYCtk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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(12, 6))\n",
    "plt.plot(lasso.coef_, 's', label=\"Lasso alpha=1\")\n",
    "plt.plot(lasso001.coef_, '^', label=\"Lasso alpha=0.01\")\n",
    "plt.plot(lasso00001.coef_, 'v', label=\"Lasso alpha=0.0001\")\n",
    "plt.plot(ridge01.coef_, 'o', label=\"Ridge alpha=0.1\")\n",
    "\n",
    "plt.legend(ncol=4, loc=(0, 1.05))\n",
    "plt.ylim(-25, 25)\n",
    "plt.xlabel(\"Coefficient index\")\n",
    "plt.ylabel(\"Coefficient magnitude\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4c74b84",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
